package bosque.unc;

import bosque.unc.enumerations.Direccion;

public class SeguimientoCupula extends Thread{
	
	
	private Telescopio    telescopio;
	private Cupula        cupula;
	private Integer       delayLectura        = 100;
	private Boolean       seguimientoActivado = true;
	private final Double  maxDifAngular       = 4.0;
	
	public SeguimientoCupula(Telescopio tel, Cupula cup)
	{
		this.telescopio = tel;
		this.cupula     = cup;
		
	}
	
	public void run()
	{
		this.seguimientoActivado = true;
		while(seguimientoActivado)
		{
			Double azimutTel = Math.toDegrees(this.telescopio.getAzimut());
			Double azimutCup = this.cupula.getAzimut().doubleValue();
			Double difAzimut = Math.abs(azimutTel - azimutCup);
			if(difAzimut >= maxDifAngular)
			{
				if(azimutTel > azimutCup)
				{
					this.cupula.activarVelLenta(true);
					this.cupula.mover(Direccion.DERECHA);
				}
				else
				{
					this.cupula.activarVelLenta(true);
					this.cupula.mover(Direccion.IZQUIERDA);
				}
				
			}
			else
			{
				this.cupula.mover(Direccion.PARADO);
			
			}
			
			try {
				Thread.sleep(this.delayLectura);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
		this.cupula.mover(Direccion.PARADO); // parar la cupula al desactivar el seguimiento
	}

	public Telescopio getTelescopio() {
		return telescopio;
	}

	public void setTelescopio(Telescopio telescopio) {
		this.telescopio = telescopio;
	}

	public Cupula getCupula() {
		return cupula;
	}

	public void setCupula(Cupula cupula) {
		this.cupula = cupula;
	}

	public Integer getDelayLectura() {
		return delayLectura;
	}

	public void setDelayLectura(Integer delayLectura) {
		this.delayLectura = delayLectura;
	}

	public Boolean getSeguimientoActivado() {
		return seguimientoActivado;
	}

	public void setSeguimientoActivado(Boolean seguimientoActivado) {
		this.seguimientoActivado = seguimientoActivado;
	}

	public Double getMaxDifAngular() {
		return maxDifAngular;
	}
	
	

}
